package week_3.experiment;

import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;

//使用选择排序法根据数值大小对数组进行排序
//在排序的每一个轮次中， 打印元素的总数，和目前数组的所有元素。
public class FifthExperiment {
    int nLixinyu;

    public FifthExperiment() {
        nLixinyu = 7;
    }

    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一些整数，这些整数是你学号中依次取出的两位数以及+\n\t+今天的时间（例如：2018/10/1,16:23:49就是数字20,17,23,1，16,23,49）");
        String sentence = scan.nextLine();
        FifthExperiment q = new FifthExperiment();
        int[] number = new int[20];
        String[] numbers = sentence.split(",");
        for (int a = 0; a < numbers.length; a++) {
            number[a] = Integer.parseInt(numbers[a]);
        }
        //磁盘读取一个文件， 这个文件有两个数字
        File file = new File("sort.txt");
        Reader reader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(reader);
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int num = stringTokenizer.countTokens();
        int[] counts = new int[num];
        int a = 0;
        while (stringTokenizer.hasMoreTokens()) {
            counts[a] = Integer.parseInt(stringTokenizer.nextToken());
            a++;
        }
        int firstnumber = counts[0];//从文件中读出的第一个数
        int secondnumber = counts[1];//从文件中读出的第二个数
        //从文件中读入数字1，  插入到数组第 5 位，并打印所有数字，和元素的总数.
        q.InsertElement2(number, 4, firstnumber);
        System.out.println("第一个元素插入后的数组为：");
        q.Print(number, numbers.length);
        System.out.println();
        System.out.println("元素总数为" + "\t" + q.size());
        System.out.println();
        //从文件中读入数字2， 插入到数组第 0 位，并打印所有数字，和元素的总数。
        q.InsertElement2(number, 0, secondnumber);
        System.out.println("第二个元素插入后的数组为：");
        q.Print(number, numbers.length);
        System.out.println();
        System.out.println("元素总数为" + "\t" + q.size());
        System.out.println();
        //从数组中删除刚才的数字1.  并打印所有数字和元素的总数
        q.DeleteElement(number, 4);
        System.out.println("删掉刚刚插入的第一个元素后的数组为：");
        q.Print(number, numbers.length);
        System.out.println();
        System.out.println("元素总数为" + "\t" + q.size());
        //使用选择排序法根据数值大小对数组进行排序
        q.SelectSorting(number);
    }


    //数组的插入操作方法。(第一种方法插入)
    public int[] InsertElement1(int array[], int index, int element) {
        int length = array.length;//确定数组长度
        int destination[] = new int[length + 1];//创建新的数组
        System.arraycopy(array, 0, destination, 0, index);
        destination[index] = element;
        System.arraycopy(array, index, destination, index + 1, length - index);
        return destination;
    }

    //数组的插入元素方法（第二种方法插入）
    public void InsertElement2(int array[], int index, int element) {
        if (array.length == 0) {
            array[0] = element;
        } else {
            for (int a = nLixinyu; a > index; a--) {
                array[a] = array[a - 1];
            }

            array[index] = element;
        }
        nLixinyu++;
    }

    //数组的删除元素操作
    public void DeleteElement(int array[], int index) {
        for (int i = 0; i < nLixinyu - 1; i++) {
            array[i] = array[i + 1];
        }

        nLixinyu--;
    }

    //数组的打印元素操作
    public void Print(int[] array, int n) {
        for (int k = 0; k < nLixinyu; k++) {
            System.out.print(array[k] + " ");
        }

//        for(int num:array){
//          System.out.print(num+" ");
//      }
    }

    public int size() {
        return nLixinyu;
    }

    //使用选择排序法根据数值大小对数组进行排序
    public void SelectSorting(int[] array) {
        for (int i = 0; i < size() - 1; i++) {
            int k = i;
            for (int j = k + 1; j < size(); j++) {
                if (array[j] < array[k]) {
                    k = j;
                }
            }
            if (i != k) {
                int temp = array[i];
                array[i] = array[k];
                array[k] = temp;
            }
            System.out.println("第" + (i + 1) + "轮排序后：");
            for (int m = 0; m < size(); m++) {
                System.out.print(array[m] + " ");
            }
            System.out.println("元素总数为：" + nLixinyu);
        }
    }
}


